// 中间件： 全局错误与异常统一处理处理
module.exports = (option, app)=>{
  return async function errorHandler(ctx, next){
    try {
      await next();
      if(ctx.status === 404 && !ctx.body){
        ctx.body = {
          msg: "fail",
          data: "404 错误"
        };
      }
    } catch (error) {
      // 记录一条错误日志
      app.emit('error', error, ctx);

      const status = error.status || 500;
      // 生产环境时 500 错误的详细错误内容不返回给客户端
      let err = status === 500 && app.config.env === 'prod'
        ? 'Internal Server Error'
        : error.message;

      // 抛出异常返回
      ctx.body = {
        msg: "fail",
        data: err
      };
      // 参数验证异常
      if(status === 422 && error.message === "Validation Failed"){
        if(error.errors && Array.isArray(error.errors)){
          err = error.errors[0].err[0] ? error.errors[0].err[0] : error.errors[0].err[1];
        }
        ctx.body = {
          msg: "fail",
          data: err
        };
      }

      ctx.status = status
    }
  }
};